'use strict';
const axios = require('axios');
const crypto = require('crypto');
module.exports = {
	/**
	 * XXXnameXXX
	 * @url admin/pages/kh/yhsj/czjl/dyrefund 前端调用的url参数地址
	 * data 请求参数
	 * @param {String} params1  参数1
	 */
	main: async (event) => {
		let {
			data = {}, userInfo, util, filterResponse, originalParam
		} = event;
		let {
			customUtil,
			uniID,
			config,
			pubFun,
			vk,
			db,
			_
		} = util;
		let {
			uid,
			app_id,
			out_order_no,
			out_refund_no,
			reason,
			refund_amount

		} = data;
		let res = {
			code: 0,
			msg: ""
		};
		console.log("111111111111111111111111");
		// 业务逻辑开始-----------------------------------------------------------
		if (userInfo.username != "admin") {
			res = {
				code: 0,
				msg: '操作失败！非admin账户不能操作退款'
			};
			return res;
		}
		const paramsMap = {
			out_order_no: out_order_no,
			out_refund_no: out_refund_no,
			reason: reason,
			refund_amount: refund_amount,
			salt: 'y2cVK8Wi2C67WaNXCbM1s5cgq18eGtScRs1FEfBu', // 请替换为您的支付密钥值
			notify_url: "https://fc-mp-ef031398-94c9-47f4-9d32-13dc68c9751f.next.bspapp.com/tkhd" // 上传云函数路径
		}

		// 返回被修改的记录条数
		let num = await vk.baseDao.update({
			dbName: "a_recharge", // 表名
			whereJson: { // 条件
				out_trade_no: out_order_no,
			},
			dataJson: { // 需要修改的数据
				out_refund_no: out_refund_no
			}
		});

		console.log("num", num);


		let signature = await requestSign(paramsMap)


		// RequestSign 担保支付请求签名算法
		// 参数："paramsMap" 所有的请求参数
		// 返回：签名字符串
		// function requestSign(paramsMap) {

		// 	// 定义属性排序的顺序
		// 	const order = [
		// 		"refund_amount",
		// 		"salt",
		// 		"out_order_no",
		// 		"notify_url",
		// 		"out_refund_no",
		// 		"reason",
		// 	];

		// 	// 根据指定顺序对属性进行排序
		// 	const sortedObject = {};
		// 	order.forEach((key) => {
		// 		sortedObject[key] = paramsMap[key];
		// 	});

		// 	console.log("order",order);

		// 	// 构建排序后的键值对数组
		// 	const keyValuePairs = Object.values(sortedObject);

		// 	// 使用 '&' 符号连接键值对数组，并生成最终的字符串
		// 	const resultString = keyValuePairs.join("&");

		// 	console.log("resultString",resultString);


		// 	const md5sum = crypto.createHash('md5');
		// 	md5sum.update(resultString);
		// 	return md5sum.digest('hex');

		// }

		// console.log("signature", signature);

		function requestSign(paramsMap) {
			// 获取所有值并按字典顺序排序
			const values = Object.values(paramsMap).sort();

			// 使用 '&' 符号连接排序后的值数组
			const resultString = values.join("&");

			const md5sum = crypto.createHash("md5");
			md5sum.update(resultString);
			return md5sum.digest("hex");
		}

		console.log("signature", signature);



		// 接口URL，根据需要选择正式环境或沙盒环境
		const apiUrl = 'https://developer.toutiao.com/api/apps/ecpay/v1/create_refund';

		// 请求头
		const headers = {
			'Content-Type': 'application/json',
		};

		// 请求参数
		const requestData = {
			app_id: app_id,
			out_order_no: out_order_no,
			out_refund_no: out_refund_no,
			reason: reason,
			refund_amount: refund_amount,
			sign: signature,
			notify_url: "https://fc-mp-ef031398-94c9-47f4-9d32-13dc68c9751f.next.bspapp.com/tkhd"
		};

		console.log("requestData", requestData);


		// 发送POST请求
		try {
			const response = await axios.post(apiUrl, requestData, {
				headers
			});
			// 请求成功处理
			console.log('响应数据:', response.data);
			// 在这里可以对响应数据进行处理
			// 返回处理成功的响应
			res.data = response.data; // 设置响应数据
		} catch (error) {
			// 请求失败处理
			console.error('错误信息:', error.response ? error.response.data : error.message);
			// 返回处理失败的响应
			res.code = 1; // 可根据需要设置不同的错误码
			res.msg = '请求失败';
		}


		// 业务逻辑结束-----------------------------------------------------------
		return res;
	}
}